//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS DevOpsGuru service.
///
///  Amazon DevOps Guru is a fully managed service that helps you identify anomalous behavior in
/// 			business critical operational applications. You specify the Amazon Web Services resources that you
/// 			want DevOps Guru to cover, then the Amazon CloudWatch metrics and Amazon Web Services CloudTrail events related to those
/// 			resources are analyzed. When anomalous behavior is detected, DevOps Guru creates an
/// 				insight that includes recommendations, related events, and
/// 			related metrics that can help you improve your operational applications. For more
/// 			information, see What is Amazon DevOps Guru.  You can specify 1 or 2 Amazon Simple Notification Service topics so you are notified every time a new insight
/// 			is created. You can also enable DevOps Guru to generate an OpsItem in Amazon Web Services Systems Manager for each
/// 			insight to help you manage and track your work addressing insights.  To learn about the DevOps Guru workflow, see How DevOps Guru works. To
/// 			learn about DevOps Guru concepts, see Concepts in DevOps Guru.
public struct DevOpsGuru: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the DevOpsGuru client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "DevOpsGuru",
            serviceIdentifier: "devops-guru",
            serviceProtocol: .restjson,
            apiVersion: "2020-12-01",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: DevOpsGuruErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "devops-guru-fips.ca-central-1.amazonaws.com",
            "us-east-1": "devops-guru-fips.us-east-1.amazonaws.com",
            "us-east-2": "devops-guru-fips.us-east-2.amazonaws.com",
            "us-west-1": "devops-guru-fips.us-west-1.amazonaws.com",
            "us-west-2": "devops-guru-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    ///  Adds a notification channel to DevOps Guru. A notification channel is used to notify you
    /// 			about important DevOps Guru events, such as when an insight is generated.  If you use an Amazon SNS topic in another account, you must attach a policy to it that grants DevOps Guru permission
    /// 				to send it notifications. DevOps Guru adds the required policy on your behalf to send notifications using Amazon SNS in your account. DevOps Guru only supports standard SNS topics.
    /// 				For more information, see Permissions
    /// 				for Amazon SNS topics. If you use an Amazon SNS topic that is encrypted by an Amazon Web Services Key Management Service customer-managed key (CMK), then you must add permissions
    /// 				to the CMK. For more information, see Permissions for
    /// 				Amazon Web Services KMS–encrypted Amazon SNS topics.
    @Sendable
    @inlinable
    public func addNotificationChannel(_ input: AddNotificationChannelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddNotificationChannelResponse {
        try await self.client.execute(
            operation: "AddNotificationChannel", 
            path: "/channels", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Adds a notification channel to DevOps Guru. A notification channel is used to notify you
    /// 			about important DevOps Guru events, such as when an insight is generated.  If you use an Amazon SNS topic in another account, you must attach a policy to it that grants DevOps Guru permission
    /// 				to send it notifications. DevOps Guru adds the required policy on your behalf to send notifications using Amazon SNS in your account. DevOps Guru only supports standard SNS topics.
    /// 				For more information, see Permissions
    /// 				for Amazon SNS topics. If you use an Amazon SNS topic that is encrypted by an Amazon Web Services Key Management Service customer-managed key (CMK), then you must add permissions
    /// 				to the CMK. For more information, see Permissions for
    /// 				Amazon Web Services KMS–encrypted Amazon SNS topics.
    ///
    /// Parameters:
    ///   - config:  A NotificationChannelConfig object that specifies what type of
    ///   - logger: Logger use during operation
    @inlinable
    public func addNotificationChannel(
        config: NotificationChannelConfig,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddNotificationChannelResponse {
        let input = AddNotificationChannelRequest(
            config: config
        )
        return try await self.addNotificationChannel(input, logger: logger)
    }

    /// Deletes the insight along with the associated anomalies, events and recommendations.
    @Sendable
    @inlinable
    public func deleteInsight(_ input: DeleteInsightRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInsightResponse {
        try await self.client.execute(
            operation: "DeleteInsight", 
            path: "/insights/{Id}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the insight along with the associated anomalies, events and recommendations.
    ///
    /// Parameters:
    ///   - id: The ID of the insight.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInsight(
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInsightResponse {
        let input = DeleteInsightRequest(
            id: id
        )
        return try await self.deleteInsight(input, logger: logger)
    }

    ///  Returns the number of open reactive insights, the number of open proactive insights,
    /// 			and the number of metrics analyzed in your Amazon Web Services account. Use these numbers to gauge the
    /// 			health of operations in your Amazon Web Services account.
    @Sendable
    @inlinable
    public func describeAccountHealth(_ input: DescribeAccountHealthRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAccountHealthResponse {
        try await self.client.execute(
            operation: "DescribeAccountHealth", 
            path: "/accounts/health", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns the number of open reactive insights, the number of open proactive insights,
    /// 			and the number of metrics analyzed in your Amazon Web Services account. Use these numbers to gauge the
    /// 			health of operations in your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAccountHealth(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAccountHealthResponse {
        let input = DescribeAccountHealthRequest(
        )
        return try await self.describeAccountHealth(input, logger: logger)
    }

    ///  For the time range passed in, returns the number of open reactive insight that were
    /// 			created, the number of open proactive insights that were created, and the Mean Time to Recover (MTTR) for all
    /// 			closed reactive insights.
    @Sendable
    @inlinable
    public func describeAccountOverview(_ input: DescribeAccountOverviewRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAccountOverviewResponse {
        try await self.client.execute(
            operation: "DescribeAccountOverview", 
            path: "/accounts/overview", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  For the time range passed in, returns the number of open reactive insight that were
    /// 			created, the number of open proactive insights that were created, and the Mean Time to Recover (MTTR) for all
    /// 			closed reactive insights.
    ///
    /// Parameters:
    ///   - fromTime:  The start of the time range passed in. The start time granularity is at the day
    ///   - toTime:  The end of the time range passed in. The start time granularity is at the day level.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAccountOverview(
        fromTime: Date,
        toTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAccountOverviewResponse {
        let input = DescribeAccountOverviewRequest(
            fromTime: fromTime, 
            toTime: toTime
        )
        return try await self.describeAccountOverview(input, logger: logger)
    }

    ///  Returns details about an anomaly that you specify using its ID.
    @Sendable
    @inlinable
    public func describeAnomaly(_ input: DescribeAnomalyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAnomalyResponse {
        try await self.client.execute(
            operation: "DescribeAnomaly", 
            path: "/anomalies/{Id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns details about an anomaly that you specify using its ID.
    ///
    /// Parameters:
    ///   - accountId: The ID of the member account.
    ///   - id:  The ID of the anomaly.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAnomaly(
        accountId: String? = nil,
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAnomalyResponse {
        let input = DescribeAnomalyRequest(
            accountId: accountId, 
            id: id
        )
        return try await self.describeAnomaly(input, logger: logger)
    }

    /// Returns the integration status of services that are integrated with DevOps Guru as Consumer
    /// 			via EventBridge. The one service that can be integrated with DevOps Guru is Amazon CodeGuru
    /// 			Profiler, which can produce proactive recommendations which can be stored and viewed in
    /// 			DevOps Guru.
    @Sendable
    @inlinable
    public func describeEventSourcesConfig(_ input: DescribeEventSourcesConfigRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEventSourcesConfigResponse {
        try await self.client.execute(
            operation: "DescribeEventSourcesConfig", 
            path: "/event-sources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the integration status of services that are integrated with DevOps Guru as Consumer
    /// 			via EventBridge. The one service that can be integrated with DevOps Guru is Amazon CodeGuru
    /// 			Profiler, which can produce proactive recommendations which can be stored and viewed in
    /// 			DevOps Guru.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEventSourcesConfig(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEventSourcesConfigResponse {
        let input = DescribeEventSourcesConfigRequest(
        )
        return try await self.describeEventSourcesConfig(input, logger: logger)
    }

    ///  Returns the most recent feedback submitted in the current Amazon Web Services account and Region.
    ///
    @Sendable
    @inlinable
    public func describeFeedback(_ input: DescribeFeedbackRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFeedbackResponse {
        try await self.client.execute(
            operation: "DescribeFeedback", 
            path: "/feedback", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns the most recent feedback submitted in the current Amazon Web Services account and Region.
    ///
    ///
    /// Parameters:
    ///   - insightId:  The ID of the insight for which the feedback was provided.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFeedback(
        insightId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFeedbackResponse {
        let input = DescribeFeedbackRequest(
            insightId: insightId
        )
        return try await self.describeFeedback(input, logger: logger)
    }

    ///  Returns details about an insight that you specify using its ID.
    @Sendable
    @inlinable
    public func describeInsight(_ input: DescribeInsightRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInsightResponse {
        try await self.client.execute(
            operation: "DescribeInsight", 
            path: "/insights/{Id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns details about an insight that you specify using its ID.
    ///
    /// Parameters:
    ///   - accountId: The ID of the member account in the organization.
    ///   - id:  The ID of the insight.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInsight(
        accountId: String? = nil,
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInsightResponse {
        let input = DescribeInsightRequest(
            accountId: accountId, 
            id: id
        )
        return try await self.describeInsight(input, logger: logger)
    }

    /// Returns active insights, predictive insights, and resource hours analyzed in last
    /// 			hour.
    @Sendable
    @inlinable
    public func describeOrganizationHealth(_ input: DescribeOrganizationHealthRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOrganizationHealthResponse {
        try await self.client.execute(
            operation: "DescribeOrganizationHealth", 
            path: "/organization/health", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns active insights, predictive insights, and resource hours analyzed in last
    /// 			hour.
    ///
    /// Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - organizationalUnitIds: The ID of the organizational unit.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOrganizationHealth(
        accountIds: [String]? = nil,
        organizationalUnitIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOrganizationHealthResponse {
        let input = DescribeOrganizationHealthRequest(
            accountIds: accountIds, 
            organizationalUnitIds: organizationalUnitIds
        )
        return try await self.describeOrganizationHealth(input, logger: logger)
    }

    /// Returns an overview of your organization's history based on the specified time range.
    /// 			The overview includes the total reactive and proactive insights.
    @Sendable
    @inlinable
    public func describeOrganizationOverview(_ input: DescribeOrganizationOverviewRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOrganizationOverviewResponse {
        try await self.client.execute(
            operation: "DescribeOrganizationOverview", 
            path: "/organization/overview", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an overview of your organization's history based on the specified time range.
    /// 			The overview includes the total reactive and proactive insights.
    ///
    /// Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - fromTime:  The start of the time range passed in. The start time granularity is at the day
    ///   - organizationalUnitIds: The ID of the organizational unit.
    ///   - toTime:  The end of the time range passed in. The start time granularity is at the day level.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOrganizationOverview(
        accountIds: [String]? = nil,
        fromTime: Date,
        organizationalUnitIds: [String]? = nil,
        toTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOrganizationOverviewResponse {
        let input = DescribeOrganizationOverviewRequest(
            accountIds: accountIds, 
            fromTime: fromTime, 
            organizationalUnitIds: organizationalUnitIds, 
            toTime: toTime
        )
        return try await self.describeOrganizationOverview(input, logger: logger)
    }

    /// Provides an overview of your system's health. If additional member accounts are part
    /// 			of your organization, you can filter those accounts using the AccountIds
    /// 			field.
    @Sendable
    @inlinable
    public func describeOrganizationResourceCollectionHealth(_ input: DescribeOrganizationResourceCollectionHealthRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOrganizationResourceCollectionHealthResponse {
        try await self.client.execute(
            operation: "DescribeOrganizationResourceCollectionHealth", 
            path: "/organization/health/resource-collection", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides an overview of your system's health. If additional member accounts are part
    /// 			of your organization, you can filter those accounts using the AccountIds
    /// 			field.
    ///
    /// Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - organizationalUnitIds: The ID of the organizational unit.
    ///   - organizationResourceCollectionType:  An Amazon Web Services resource collection type. This type specifies how analyzed Amazon Web Services resources
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOrganizationResourceCollectionHealth(
        accountIds: [String]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        organizationalUnitIds: [String]? = nil,
        organizationResourceCollectionType: OrganizationResourceCollectionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOrganizationResourceCollectionHealthResponse {
        let input = DescribeOrganizationResourceCollectionHealthRequest(
            accountIds: accountIds, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            organizationalUnitIds: organizationalUnitIds, 
            organizationResourceCollectionType: organizationResourceCollectionType
        )
        return try await self.describeOrganizationResourceCollectionHealth(input, logger: logger)
    }

    ///  Returns the number of open proactive insights, open reactive insights, and the Mean Time to Recover (MTTR)
    /// 			for all closed insights in resource collections in your account. You specify the type of
    /// 			Amazon Web Services resources collection. The two types of Amazon Web Services resource collections supported are Amazon Web Services CloudFormation stacks and  Amazon Web Services resources that contain the same Amazon Web Services tag. DevOps Guru can be configured to analyze  	the Amazon Web Services resources that are defined in the stacks or that are tagged using the same tag key. You can specify up to 500 Amazon Web Services CloudFormation stacks.
    @Sendable
    @inlinable
    public func describeResourceCollectionHealth(_ input: DescribeResourceCollectionHealthRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeResourceCollectionHealthResponse {
        try await self.client.execute(
            operation: "DescribeResourceCollectionHealth", 
            path: "/accounts/health/resource-collection/{ResourceCollectionType}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns the number of open proactive insights, open reactive insights, and the Mean Time to Recover (MTTR)
    /// 			for all closed insights in resource collections in your account. You specify the type of
    /// 			Amazon Web Services resources collection. The two types of Amazon Web Services resource collections supported are Amazon Web Services CloudFormation stacks and  Amazon Web Services resources that contain the same Amazon Web Services tag. DevOps Guru can be configured to analyze  	the Amazon Web Services resources that are defined in the stacks or that are tagged using the same tag key. You can specify up to 500 Amazon Web Services CloudFormation stacks.
    ///
    /// Parameters:
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - resourceCollectionType:  An Amazon Web Services resource collection type. This type specifies how analyzed Amazon Web Services resources
    ///   - logger: Logger use during operation
    @inlinable
    public func describeResourceCollectionHealth(
        nextToken: String? = nil,
        resourceCollectionType: ResourceCollectionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeResourceCollectionHealthResponse {
        let input = DescribeResourceCollectionHealthRequest(
            nextToken: nextToken, 
            resourceCollectionType: resourceCollectionType
        )
        return try await self.describeResourceCollectionHealth(input, logger: logger)
    }

    ///  Returns the integration status of services that are integrated with DevOps Guru.
    /// 			The one service that can be integrated with DevOps Guru  	is Amazon Web Services Systems Manager, which can be used to create an OpsItem for each generated insight.
    @Sendable
    @inlinable
    public func describeServiceIntegration(_ input: DescribeServiceIntegrationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeServiceIntegrationResponse {
        try await self.client.execute(
            operation: "DescribeServiceIntegration", 
            path: "/service-integrations", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns the integration status of services that are integrated with DevOps Guru.
    /// 			The one service that can be integrated with DevOps Guru  	is Amazon Web Services Systems Manager, which can be used to create an OpsItem for each generated insight.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeServiceIntegration(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeServiceIntegrationResponse {
        let input = DescribeServiceIntegrationRequest(
        )
        return try await self.describeServiceIntegration(input, logger: logger)
    }

    /// Returns an estimate of the monthly cost for DevOps Guru to analyze your Amazon Web Services resources.
    /// 			For more information,
    /// 			see Estimate your
    /// 			Amazon DevOps Guru costs and
    /// 			Amazon DevOps Guru pricing.
    @Sendable
    @inlinable
    public func getCostEstimation(_ input: GetCostEstimationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCostEstimationResponse {
        try await self.client.execute(
            operation: "GetCostEstimation", 
            path: "/cost-estimation", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an estimate of the monthly cost for DevOps Guru to analyze your Amazon Web Services resources.
    /// 			For more information,
    /// 			see Estimate your
    /// 			Amazon DevOps Guru costs and
    /// 			Amazon DevOps Guru pricing.
    ///
    /// Parameters:
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCostEstimation(
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCostEstimationResponse {
        let input = GetCostEstimationRequest(
            nextToken: nextToken
        )
        return try await self.getCostEstimation(input, logger: logger)
    }

    ///  Returns lists Amazon Web Services resources that are of the specified resource collection type.
    /// 			The two types of Amazon Web Services resource collections supported are Amazon Web Services CloudFormation stacks and  Amazon Web Services resources that contain the same Amazon Web Services tag. DevOps Guru can be configured to analyze  	the Amazon Web Services resources that are defined in the stacks or that are tagged using the same tag key. You can specify up to 500 Amazon Web Services CloudFormation stacks.
    @Sendable
    @inlinable
    public func getResourceCollection(_ input: GetResourceCollectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetResourceCollectionResponse {
        try await self.client.execute(
            operation: "GetResourceCollection", 
            path: "/resource-collections/{ResourceCollectionType}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns lists Amazon Web Services resources that are of the specified resource collection type.
    /// 			The two types of Amazon Web Services resource collections supported are Amazon Web Services CloudFormation stacks and  Amazon Web Services resources that contain the same Amazon Web Services tag. DevOps Guru can be configured to analyze  	the Amazon Web Services resources that are defined in the stacks or that are tagged using the same tag key. You can specify up to 500 Amazon Web Services CloudFormation stacks.
    ///
    /// Parameters:
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - resourceCollectionType:  The type of Amazon Web Services resource collections to return. The one valid value is
    ///   - logger: Logger use during operation
    @inlinable
    public func getResourceCollection(
        nextToken: String? = nil,
        resourceCollectionType: ResourceCollectionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetResourceCollectionResponse {
        let input = GetResourceCollectionRequest(
            nextToken: nextToken, 
            resourceCollectionType: resourceCollectionType
        )
        return try await self.getResourceCollection(input, logger: logger)
    }

    ///  Returns a list of the anomalies that belong to an insight that you specify using its
    /// 			ID.
    @Sendable
    @inlinable
    public func listAnomaliesForInsight(_ input: ListAnomaliesForInsightRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAnomaliesForInsightResponse {
        try await self.client.execute(
            operation: "ListAnomaliesForInsight", 
            path: "/anomalies/insight/{InsightId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of the anomalies that belong to an insight that you specify using its
    /// 			ID.
    ///
    /// Parameters:
    ///   - accountId: The ID of the Amazon Web Services account.
    ///   - filters: 			Specifies one or more service names that are used to list anomalies.
    ///   - insightId:  The ID of the insight. The returned anomalies belong to this insight.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - startTimeRange:  A time range used to specify when the requested anomalies started. All returned
    ///   - logger: Logger use during operation
    @inlinable
    public func listAnomaliesForInsight(
        accountId: String? = nil,
        filters: ListAnomaliesForInsightFilters? = nil,
        insightId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        startTimeRange: StartTimeRange? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAnomaliesForInsightResponse {
        let input = ListAnomaliesForInsightRequest(
            accountId: accountId, 
            filters: filters, 
            insightId: insightId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            startTimeRange: startTimeRange
        )
        return try await self.listAnomaliesForInsight(input, logger: logger)
    }

    /// 			Returns the list of log groups that contain log anomalies.
    ///
    @Sendable
    @inlinable
    public func listAnomalousLogGroups(_ input: ListAnomalousLogGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAnomalousLogGroupsResponse {
        try await self.client.execute(
            operation: "ListAnomalousLogGroups", 
            path: "/list-log-anomalies", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// 			Returns the list of log groups that contain log anomalies.
    ///
    ///
    /// Parameters:
    ///   - insightId: 			The ID of the insight containing the log groups.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAnomalousLogGroups(
        insightId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAnomalousLogGroupsResponse {
        let input = ListAnomalousLogGroupsRequest(
            insightId: insightId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAnomalousLogGroups(input, logger: logger)
    }

    ///  Returns a list of the events emitted by the resources that are evaluated by DevOps Guru.
    /// 			You can use filters to specify which events are returned.
    @Sendable
    @inlinable
    public func listEvents(_ input: ListEventsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEventsResponse {
        try await self.client.execute(
            operation: "ListEvents", 
            path: "/events", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of the events emitted by the resources that are evaluated by DevOps Guru.
    /// 			You can use filters to specify which events are returned.
    ///
    /// Parameters:
    ///   - accountId: The ID of the Amazon Web Services account.
    ///   - filters:  A ListEventsFilters object used to specify which events to return.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEvents(
        accountId: String? = nil,
        filters: ListEventsFilters,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEventsResponse {
        let input = ListEventsRequest(
            accountId: accountId, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEvents(input, logger: logger)
    }

    ///  Returns a list of insights in your Amazon Web Services account. You can specify which insights are
    /// 			returned by their start time and status (ONGOING, CLOSED, or
    /// 				ANY).
    @Sendable
    @inlinable
    public func listInsights(_ input: ListInsightsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInsightsResponse {
        try await self.client.execute(
            operation: "ListInsights", 
            path: "/insights", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of insights in your Amazon Web Services account. You can specify which insights are
    /// 			returned by their start time and status (ONGOING, CLOSED, or
    /// 				ANY).
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - statusFilter:  A filter used to filter the returned insights by their status. You can specify one
    ///   - logger: Logger use during operation
    @inlinable
    public func listInsights(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        statusFilter: ListInsightsStatusFilter,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInsightsResponse {
        let input = ListInsightsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            statusFilter: statusFilter
        )
        return try await self.listInsights(input, logger: logger)
    }

    /// 			Returns the list of all log groups that are being monitored and tagged by DevOps Guru.
    ///
    @Sendable
    @inlinable
    public func listMonitoredResources(_ input: ListMonitoredResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMonitoredResourcesResponse {
        try await self.client.execute(
            operation: "ListMonitoredResources", 
            path: "/monitoredResources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// 			Returns the list of all log groups that are being monitored and tagged by DevOps Guru.
    ///
    ///
    /// Parameters:
    ///   - filters: 			Filters to determine which monitored resources you want to retrieve. You can filter by resource type or resource permission status.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMonitoredResources(
        filters: ListMonitoredResourcesFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMonitoredResourcesResponse {
        let input = ListMonitoredResourcesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listMonitoredResources(input, logger: logger)
    }

    ///  Returns a list of notification channels configured for DevOps Guru. Each notification
    /// 			channel is used to notify you when DevOps Guru generates an insight that contains information
    /// 			about how to improve your operations. The one  	supported notification channel is Amazon Simple Notification Service (Amazon SNS).
    @Sendable
    @inlinable
    public func listNotificationChannels(_ input: ListNotificationChannelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListNotificationChannelsResponse {
        try await self.client.execute(
            operation: "ListNotificationChannels", 
            path: "/channels", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of notification channels configured for DevOps Guru. Each notification
    /// 			channel is used to notify you when DevOps Guru generates an insight that contains information
    /// 			about how to improve your operations. The one  	supported notification channel is Amazon Simple Notification Service (Amazon SNS).
    ///
    /// Parameters:
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listNotificationChannels(
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListNotificationChannelsResponse {
        let input = ListNotificationChannelsRequest(
            nextToken: nextToken
        )
        return try await self.listNotificationChannels(input, logger: logger)
    }

    /// Returns a list of insights associated with the account or OU Id.
    @Sendable
    @inlinable
    public func listOrganizationInsights(_ input: ListOrganizationInsightsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOrganizationInsightsResponse {
        try await self.client.execute(
            operation: "ListOrganizationInsights", 
            path: "/organization/insights", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of insights associated with the account or OU Id.
    ///
    /// Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - organizationalUnitIds: The ID of the organizational unit.
    ///   - statusFilter: 
    ///   - logger: Logger use during operation
    @inlinable
    public func listOrganizationInsights(
        accountIds: [String]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        organizationalUnitIds: [String]? = nil,
        statusFilter: ListInsightsStatusFilter,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOrganizationInsightsResponse {
        let input = ListOrganizationInsightsRequest(
            accountIds: accountIds, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            organizationalUnitIds: organizationalUnitIds, 
            statusFilter: statusFilter
        )
        return try await self.listOrganizationInsights(input, logger: logger)
    }

    ///  Returns a list of a specified insight's recommendations. Each recommendation includes
    /// 			a list of related metrics and a list of related events.
    @Sendable
    @inlinable
    public func listRecommendations(_ input: ListRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecommendationsResponse {
        try await self.client.execute(
            operation: "ListRecommendations", 
            path: "/recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of a specified insight's recommendations. Each recommendation includes
    /// 			a list of related metrics and a list of related events.
    ///
    /// Parameters:
    ///   - accountId: The ID of the Amazon Web Services account.
    ///   - insightId:  The ID of the requested insight.
    ///   - locale: A locale that specifies the language to use for recommendations.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecommendations(
        accountId: String? = nil,
        insightId: String,
        locale: Locale? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecommendationsResponse {
        let input = ListRecommendationsRequest(
            accountId: accountId, 
            insightId: insightId, 
            locale: locale, 
            nextToken: nextToken
        )
        return try await self.listRecommendations(input, logger: logger)
    }

    ///  Collects customer feedback about the specified insight.
    @Sendable
    @inlinable
    public func putFeedback(_ input: PutFeedbackRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutFeedbackResponse {
        try await self.client.execute(
            operation: "PutFeedback", 
            path: "/feedback", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Collects customer feedback about the specified insight.
    ///
    /// Parameters:
    ///   - insightFeedback:  The feedback from customers is about the recommendations in this insight.
    ///   - logger: Logger use during operation
    @inlinable
    public func putFeedback(
        insightFeedback: InsightFeedback? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutFeedbackResponse {
        let input = PutFeedbackRequest(
            insightFeedback: insightFeedback
        )
        return try await self.putFeedback(input, logger: logger)
    }

    ///  Removes a notification channel from DevOps Guru. A notification channel is used to notify
    /// 			you when DevOps Guru generates an insight that contains information about how to improve your
    /// 			operations.
    @Sendable
    @inlinable
    public func removeNotificationChannel(_ input: RemoveNotificationChannelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RemoveNotificationChannelResponse {
        try await self.client.execute(
            operation: "RemoveNotificationChannel", 
            path: "/channels/{Id}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Removes a notification channel from DevOps Guru. A notification channel is used to notify
    /// 			you when DevOps Guru generates an insight that contains information about how to improve your
    /// 			operations.
    ///
    /// Parameters:
    ///   - id:  The ID of the notification channel to be removed.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeNotificationChannel(
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RemoveNotificationChannelResponse {
        let input = RemoveNotificationChannelRequest(
            id: id
        )
        return try await self.removeNotificationChannel(input, logger: logger)
    }

    ///  Returns a list of insights in your Amazon Web Services account. You can specify which insights are
    /// 			returned by their start time, one or more statuses (ONGOING or CLOSED), one or more severities
    /// 				(LOW, MEDIUM, and HIGH), and type
    /// 				(REACTIVE or PROACTIVE).  Use the Filters parameter to specify status and severity search
    /// 			parameters. Use the Type parameter to specify REACTIVE or
    /// 				PROACTIVE in your search.
    @Sendable
    @inlinable
    public func searchInsights(_ input: SearchInsightsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SearchInsightsResponse {
        try await self.client.execute(
            operation: "SearchInsights", 
            path: "/insights/search", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of insights in your Amazon Web Services account. You can specify which insights are
    /// 			returned by their start time, one or more statuses (ONGOING or CLOSED), one or more severities
    /// 				(LOW, MEDIUM, and HIGH), and type
    /// 				(REACTIVE or PROACTIVE).  Use the Filters parameter to specify status and severity search
    /// 			parameters. Use the Type parameter to specify REACTIVE or
    /// 				PROACTIVE in your search.
    ///
    /// Parameters:
    ///   - filters:  A SearchInsightsFilters object that is used to set the severity and
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - startTimeRange:  The start of the time range passed in. Returned insights occurred after this time.
    ///   - type:  The type of insights you are searching for (REACTIVE or
    ///   - logger: Logger use during operation
    @inlinable
    public func searchInsights(
        filters: SearchInsightsFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        startTimeRange: StartTimeRange,
        type: InsightType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SearchInsightsResponse {
        let input = SearchInsightsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            startTimeRange: startTimeRange, 
            type: type
        )
        return try await self.searchInsights(input, logger: logger)
    }

    ///  Returns a list of insights in your organization. You can specify which insights are
    /// 			returned by their start time, one or more statuses (ONGOING,
    /// 				CLOSED, and CLOSED), one or more severities
    /// 				(LOW, MEDIUM, and HIGH), and type
    /// 				(REACTIVE or PROACTIVE).  Use the Filters parameter to specify status and severity search
    /// 			parameters. Use the Type parameter to specify REACTIVE or
    /// 				PROACTIVE in your search.
    @Sendable
    @inlinable
    public func searchOrganizationInsights(_ input: SearchOrganizationInsightsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SearchOrganizationInsightsResponse {
        try await self.client.execute(
            operation: "SearchOrganizationInsights", 
            path: "/organization/insights/search", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns a list of insights in your organization. You can specify which insights are
    /// 			returned by their start time, one or more statuses (ONGOING,
    /// 				CLOSED, and CLOSED), one or more severities
    /// 				(LOW, MEDIUM, and HIGH), and type
    /// 				(REACTIVE or PROACTIVE).  Use the Filters parameter to specify status and severity search
    /// 			parameters. Use the Type parameter to specify REACTIVE or
    /// 				PROACTIVE in your search.
    ///
    /// Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - filters:  A SearchOrganizationInsightsFilters object that is used to set the
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - nextToken: The pagination token to use to retrieve  the next page of results for this operation. If this value is null, it retrieves the first page.
    ///   - startTimeRange: 
    ///   - type:  The type of insights you are searching for (REACTIVE or
    ///   - logger: Logger use during operation
    @inlinable
    public func searchOrganizationInsights(
        accountIds: [String],
        filters: SearchOrganizationInsightsFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        startTimeRange: StartTimeRange,
        type: InsightType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SearchOrganizationInsightsResponse {
        let input = SearchOrganizationInsightsRequest(
            accountIds: accountIds, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            startTimeRange: startTimeRange, 
            type: type
        )
        return try await self.searchOrganizationInsights(input, logger: logger)
    }

    /// Starts the creation of an estimate of the monthly cost to analyze your Amazon Web Services
    /// 			resources.
    @Sendable
    @inlinable
    public func startCostEstimation(_ input: StartCostEstimationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartCostEstimationResponse {
        try await self.client.execute(
            operation: "StartCostEstimation", 
            path: "/cost-estimation", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the creation of an estimate of the monthly cost to analyze your Amazon Web Services
    /// 			resources.
    ///
    /// Parameters:
    ///   - clientToken: The idempotency token used to identify each cost estimate request.
    ///   - resourceCollection: The collection of Amazon Web Services resources used to create a monthly DevOps Guru cost estimate.
    ///   - logger: Logger use during operation
    @inlinable
    public func startCostEstimation(
        clientToken: String? = StartCostEstimationRequest.idempotencyToken(),
        resourceCollection: CostEstimationResourceCollectionFilter,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartCostEstimationResponse {
        let input = StartCostEstimationRequest(
            clientToken: clientToken, 
            resourceCollection: resourceCollection
        )
        return try await self.startCostEstimation(input, logger: logger)
    }

    /// Enables or disables integration with a service that can be integrated with DevOps Guru. The
    /// 			one service that can be integrated with DevOps Guru is Amazon CodeGuru Profiler, which
    /// 			can produce proactive recommendations which can be stored and viewed in DevOps Guru.
    @Sendable
    @inlinable
    public func updateEventSourcesConfig(_ input: UpdateEventSourcesConfigRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEventSourcesConfigResponse {
        try await self.client.execute(
            operation: "UpdateEventSourcesConfig", 
            path: "/event-sources", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables or disables integration with a service that can be integrated with DevOps Guru. The
    /// 			one service that can be integrated with DevOps Guru is Amazon CodeGuru Profiler, which
    /// 			can produce proactive recommendations which can be stored and viewed in DevOps Guru.
    ///
    /// Parameters:
    ///   - eventSources: Configuration information about the integration of DevOps Guru as the Consumer via
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEventSourcesConfig(
        eventSources: EventSourcesConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEventSourcesConfigResponse {
        let input = UpdateEventSourcesConfigRequest(
            eventSources: eventSources
        )
        return try await self.updateEventSourcesConfig(input, logger: logger)
    }

    ///  Updates the collection of resources that DevOps Guru analyzes.
    /// 			The two types of Amazon Web Services resource collections supported are Amazon Web Services CloudFormation stacks and  Amazon Web Services resources that contain the same Amazon Web Services tag. DevOps Guru can be configured to analyze  	the Amazon Web Services resources that are defined in the stacks or that are tagged using the same tag key. You can specify up to 500 Amazon Web Services CloudFormation stacks. This method also creates the IAM role required for
    /// 			you to use DevOps Guru.
    @Sendable
    @inlinable
    public func updateResourceCollection(_ input: UpdateResourceCollectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateResourceCollectionResponse {
        try await self.client.execute(
            operation: "UpdateResourceCollection", 
            path: "/resource-collections", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates the collection of resources that DevOps Guru analyzes.
    /// 			The two types of Amazon Web Services resource collections supported are Amazon Web Services CloudFormation stacks and  Amazon Web Services resources that contain the same Amazon Web Services tag. DevOps Guru can be configured to analyze  	the Amazon Web Services resources that are defined in the stacks or that are tagged using the same tag key. You can specify up to 500 Amazon Web Services CloudFormation stacks. This method also creates the IAM role required for
    /// 			you to use DevOps Guru.
    ///
    /// Parameters:
    ///   - action:  Specifies if the resource collection in the request is added or deleted to the
    ///   - resourceCollection: 
    ///   - logger: Logger use during operation
    @inlinable
    public func updateResourceCollection(
        action: UpdateResourceCollectionAction,
        resourceCollection: UpdateResourceCollectionFilter,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateResourceCollectionResponse {
        let input = UpdateResourceCollectionRequest(
            action: action, 
            resourceCollection: resourceCollection
        )
        return try await self.updateResourceCollection(input, logger: logger)
    }

    ///  Enables or disables integration with a service that can be integrated with DevOps Guru. The
    /// 			one service that can be integrated with DevOps Guru is Amazon Web Services Systems Manager, which can be used to create
    /// 			an OpsItem for each generated insight.
    @Sendable
    @inlinable
    public func updateServiceIntegration(_ input: UpdateServiceIntegrationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateServiceIntegrationResponse {
        try await self.client.execute(
            operation: "UpdateServiceIntegration", 
            path: "/service-integrations", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Enables or disables integration with a service that can be integrated with DevOps Guru. The
    /// 			one service that can be integrated with DevOps Guru is Amazon Web Services Systems Manager, which can be used to create
    /// 			an OpsItem for each generated insight.
    ///
    /// Parameters:
    ///   - serviceIntegration:  An IntegratedServiceConfig object used to specify the integrated service
    ///   - logger: Logger use during operation
    @inlinable
    public func updateServiceIntegration(
        serviceIntegration: UpdateServiceIntegrationConfig,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateServiceIntegrationResponse {
        let input = UpdateServiceIntegrationRequest(
            serviceIntegration: serviceIntegration
        )
        return try await self.updateServiceIntegration(input, logger: logger)
    }
}

extension DevOpsGuru {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: DevOpsGuru, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension DevOpsGuru {
    /// Return PaginatorSequence for operation ``describeOrganizationResourceCollectionHealth(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOrganizationResourceCollectionHealthPaginator(
        _ input: DescribeOrganizationResourceCollectionHealthRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeOrganizationResourceCollectionHealthRequest, DescribeOrganizationResourceCollectionHealthResponse> {
        return .init(
            input: input,
            command: self.describeOrganizationResourceCollectionHealth,
            inputKey: \DescribeOrganizationResourceCollectionHealthRequest.nextToken,
            outputKey: \DescribeOrganizationResourceCollectionHealthResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeOrganizationResourceCollectionHealth(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - organizationalUnitIds: The ID of the organizational unit.
    ///   - organizationResourceCollectionType:  An Amazon Web Services resource collection type. This type specifies how analyzed Amazon Web Services resources
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOrganizationResourceCollectionHealthPaginator(
        accountIds: [String]? = nil,
        maxResults: Int? = nil,
        organizationalUnitIds: [String]? = nil,
        organizationResourceCollectionType: OrganizationResourceCollectionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeOrganizationResourceCollectionHealthRequest, DescribeOrganizationResourceCollectionHealthResponse> {
        let input = DescribeOrganizationResourceCollectionHealthRequest(
            accountIds: accountIds, 
            maxResults: maxResults, 
            organizationalUnitIds: organizationalUnitIds, 
            organizationResourceCollectionType: organizationResourceCollectionType
        )
        return self.describeOrganizationResourceCollectionHealthPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeResourceCollectionHealth(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeResourceCollectionHealthPaginator(
        _ input: DescribeResourceCollectionHealthRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeResourceCollectionHealthRequest, DescribeResourceCollectionHealthResponse> {
        return .init(
            input: input,
            command: self.describeResourceCollectionHealth,
            inputKey: \DescribeResourceCollectionHealthRequest.nextToken,
            outputKey: \DescribeResourceCollectionHealthResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeResourceCollectionHealth(_:logger:)``.
    ///
    /// - Parameters:
    ///   - resourceCollectionType:  An Amazon Web Services resource collection type. This type specifies how analyzed Amazon Web Services resources
    ///   - logger: Logger used for logging
    @inlinable
    public func describeResourceCollectionHealthPaginator(
        resourceCollectionType: ResourceCollectionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeResourceCollectionHealthRequest, DescribeResourceCollectionHealthResponse> {
        let input = DescribeResourceCollectionHealthRequest(
            resourceCollectionType: resourceCollectionType
        )
        return self.describeResourceCollectionHealthPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getCostEstimation(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getCostEstimationPaginator(
        _ input: GetCostEstimationRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetCostEstimationRequest, GetCostEstimationResponse> {
        return .init(
            input: input,
            command: self.getCostEstimation,
            inputKey: \GetCostEstimationRequest.nextToken,
            outputKey: \GetCostEstimationResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getCostEstimation(_:logger:)``.
    ///
    /// - Parameters:
    ///   - logger: Logger used for logging
    @inlinable
    public func getCostEstimationPaginator(
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetCostEstimationRequest, GetCostEstimationResponse> {
        let input = GetCostEstimationRequest(
        )
        return self.getCostEstimationPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getResourceCollection(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourceCollectionPaginator(
        _ input: GetResourceCollectionRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetResourceCollectionRequest, GetResourceCollectionResponse> {
        return .init(
            input: input,
            command: self.getResourceCollection,
            inputKey: \GetResourceCollectionRequest.nextToken,
            outputKey: \GetResourceCollectionResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getResourceCollection(_:logger:)``.
    ///
    /// - Parameters:
    ///   - resourceCollectionType:  The type of Amazon Web Services resource collections to return. The one valid value is
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourceCollectionPaginator(
        resourceCollectionType: ResourceCollectionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetResourceCollectionRequest, GetResourceCollectionResponse> {
        let input = GetResourceCollectionRequest(
            resourceCollectionType: resourceCollectionType
        )
        return self.getResourceCollectionPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAnomaliesForInsight(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAnomaliesForInsightPaginator(
        _ input: ListAnomaliesForInsightRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAnomaliesForInsightRequest, ListAnomaliesForInsightResponse> {
        return .init(
            input: input,
            command: self.listAnomaliesForInsight,
            inputKey: \ListAnomaliesForInsightRequest.nextToken,
            outputKey: \ListAnomaliesForInsightResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAnomaliesForInsight(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: The ID of the Amazon Web Services account.
    ///   - filters: 			Specifies one or more service names that are used to list anomalies.
    ///   - insightId:  The ID of the insight. The returned anomalies belong to this insight.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - startTimeRange:  A time range used to specify when the requested anomalies started. All returned
    ///   - logger: Logger used for logging
    @inlinable
    public func listAnomaliesForInsightPaginator(
        accountId: String? = nil,
        filters: ListAnomaliesForInsightFilters? = nil,
        insightId: String,
        maxResults: Int? = nil,
        startTimeRange: StartTimeRange? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAnomaliesForInsightRequest, ListAnomaliesForInsightResponse> {
        let input = ListAnomaliesForInsightRequest(
            accountId: accountId, 
            filters: filters, 
            insightId: insightId, 
            maxResults: maxResults, 
            startTimeRange: startTimeRange
        )
        return self.listAnomaliesForInsightPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAnomalousLogGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAnomalousLogGroupsPaginator(
        _ input: ListAnomalousLogGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAnomalousLogGroupsRequest, ListAnomalousLogGroupsResponse> {
        return .init(
            input: input,
            command: self.listAnomalousLogGroups,
            inputKey: \ListAnomalousLogGroupsRequest.nextToken,
            outputKey: \ListAnomalousLogGroupsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAnomalousLogGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - insightId: 			The ID of the insight containing the log groups.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAnomalousLogGroupsPaginator(
        insightId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAnomalousLogGroupsRequest, ListAnomalousLogGroupsResponse> {
        let input = ListAnomalousLogGroupsRequest(
            insightId: insightId, 
            maxResults: maxResults
        )
        return self.listAnomalousLogGroupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEvents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventsPaginator(
        _ input: ListEventsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEventsRequest, ListEventsResponse> {
        return .init(
            input: input,
            command: self.listEvents,
            inputKey: \ListEventsRequest.nextToken,
            outputKey: \ListEventsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEvents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: The ID of the Amazon Web Services account.
    ///   - filters:  A ListEventsFilters object used to specify which events to return.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventsPaginator(
        accountId: String? = nil,
        filters: ListEventsFilters,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEventsRequest, ListEventsResponse> {
        let input = ListEventsRequest(
            accountId: accountId, 
            filters: filters, 
            maxResults: maxResults
        )
        return self.listEventsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listInsightsPaginator(
        _ input: ListInsightsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListInsightsRequest, ListInsightsResponse> {
        return .init(
            input: input,
            command: self.listInsights,
            inputKey: \ListInsightsRequest.nextToken,
            outputKey: \ListInsightsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - statusFilter:  A filter used to filter the returned insights by their status. You can specify one
    ///   - logger: Logger used for logging
    @inlinable
    public func listInsightsPaginator(
        maxResults: Int? = nil,
        statusFilter: ListInsightsStatusFilter,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListInsightsRequest, ListInsightsResponse> {
        let input = ListInsightsRequest(
            maxResults: maxResults, 
            statusFilter: statusFilter
        )
        return self.listInsightsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMonitoredResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMonitoredResourcesPaginator(
        _ input: ListMonitoredResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMonitoredResourcesRequest, ListMonitoredResourcesResponse> {
        return .init(
            input: input,
            command: self.listMonitoredResources,
            inputKey: \ListMonitoredResourcesRequest.nextToken,
            outputKey: \ListMonitoredResourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMonitoredResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: 			Filters to determine which monitored resources you want to retrieve. You can filter by resource type or resource permission status.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMonitoredResourcesPaginator(
        filters: ListMonitoredResourcesFilters? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMonitoredResourcesRequest, ListMonitoredResourcesResponse> {
        let input = ListMonitoredResourcesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listMonitoredResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listNotificationChannels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listNotificationChannelsPaginator(
        _ input: ListNotificationChannelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListNotificationChannelsRequest, ListNotificationChannelsResponse> {
        return .init(
            input: input,
            command: self.listNotificationChannels,
            inputKey: \ListNotificationChannelsRequest.nextToken,
            outputKey: \ListNotificationChannelsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listNotificationChannels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - logger: Logger used for logging
    @inlinable
    public func listNotificationChannelsPaginator(
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListNotificationChannelsRequest, ListNotificationChannelsResponse> {
        let input = ListNotificationChannelsRequest(
        )
        return self.listNotificationChannelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOrganizationInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOrganizationInsightsPaginator(
        _ input: ListOrganizationInsightsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOrganizationInsightsRequest, ListOrganizationInsightsResponse> {
        return .init(
            input: input,
            command: self.listOrganizationInsights,
            inputKey: \ListOrganizationInsightsRequest.nextToken,
            outputKey: \ListOrganizationInsightsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOrganizationInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - organizationalUnitIds: The ID of the organizational unit.
    ///   - statusFilter: 
    ///   - logger: Logger used for logging
    @inlinable
    public func listOrganizationInsightsPaginator(
        accountIds: [String]? = nil,
        maxResults: Int? = nil,
        organizationalUnitIds: [String]? = nil,
        statusFilter: ListInsightsStatusFilter,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOrganizationInsightsRequest, ListOrganizationInsightsResponse> {
        let input = ListOrganizationInsightsRequest(
            accountIds: accountIds, 
            maxResults: maxResults, 
            organizationalUnitIds: organizationalUnitIds, 
            statusFilter: statusFilter
        )
        return self.listOrganizationInsightsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendationsPaginator(
        _ input: ListRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecommendationsRequest, ListRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listRecommendations,
            inputKey: \ListRecommendationsRequest.nextToken,
            outputKey: \ListRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: The ID of the Amazon Web Services account.
    ///   - insightId:  The ID of the requested insight.
    ///   - locale: A locale that specifies the language to use for recommendations.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendationsPaginator(
        accountId: String? = nil,
        insightId: String,
        locale: Locale? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecommendationsRequest, ListRecommendationsResponse> {
        let input = ListRecommendationsRequest(
            accountId: accountId, 
            insightId: insightId, 
            locale: locale
        )
        return self.listRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``searchInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func searchInsightsPaginator(
        _ input: SearchInsightsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<SearchInsightsRequest, SearchInsightsResponse> {
        return .init(
            input: input,
            command: self.searchInsights,
            inputKey: \SearchInsightsRequest.nextToken,
            outputKey: \SearchInsightsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``searchInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters:  A SearchInsightsFilters object that is used to set the severity and
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - startTimeRange:  The start of the time range passed in. Returned insights occurred after this time.
    ///   - type:  The type of insights you are searching for (REACTIVE or
    ///   - logger: Logger used for logging
    @inlinable
    public func searchInsightsPaginator(
        filters: SearchInsightsFilters? = nil,
        maxResults: Int? = nil,
        startTimeRange: StartTimeRange,
        type: InsightType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<SearchInsightsRequest, SearchInsightsResponse> {
        let input = SearchInsightsRequest(
            filters: filters, 
            maxResults: maxResults, 
            startTimeRange: startTimeRange, 
            type: type
        )
        return self.searchInsightsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``searchOrganizationInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func searchOrganizationInsightsPaginator(
        _ input: SearchOrganizationInsightsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<SearchOrganizationInsightsRequest, SearchOrganizationInsightsResponse> {
        return .init(
            input: input,
            command: self.searchOrganizationInsights,
            inputKey: \SearchOrganizationInsightsRequest.nextToken,
            outputKey: \SearchOrganizationInsightsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``searchOrganizationInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountIds: The ID of the Amazon Web Services account.
    ///   - filters:  A SearchOrganizationInsightsFilters object that is used to set the
    ///   - maxResults: The maximum number of results to return with a single call.
    ///   - startTimeRange: 
    ///   - type:  The type of insights you are searching for (REACTIVE or
    ///   - logger: Logger used for logging
    @inlinable
    public func searchOrganizationInsightsPaginator(
        accountIds: [String],
        filters: SearchOrganizationInsightsFilters? = nil,
        maxResults: Int? = nil,
        startTimeRange: StartTimeRange,
        type: InsightType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<SearchOrganizationInsightsRequest, SearchOrganizationInsightsResponse> {
        let input = SearchOrganizationInsightsRequest(
            accountIds: accountIds, 
            filters: filters, 
            maxResults: maxResults, 
            startTimeRange: startTimeRange, 
            type: type
        )
        return self.searchOrganizationInsightsPaginator(input, logger: logger)
    }
}

extension DevOpsGuru.DescribeOrganizationResourceCollectionHealthRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.DescribeOrganizationResourceCollectionHealthRequest {
        return .init(
            accountIds: self.accountIds,
            maxResults: self.maxResults,
            nextToken: token,
            organizationalUnitIds: self.organizationalUnitIds,
            organizationResourceCollectionType: self.organizationResourceCollectionType
        )
    }
}

extension DevOpsGuru.DescribeResourceCollectionHealthRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.DescribeResourceCollectionHealthRequest {
        return .init(
            nextToken: token,
            resourceCollectionType: self.resourceCollectionType
        )
    }
}

extension DevOpsGuru.GetCostEstimationRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.GetCostEstimationRequest {
        return .init(
            nextToken: token
        )
    }
}

extension DevOpsGuru.GetResourceCollectionRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.GetResourceCollectionRequest {
        return .init(
            nextToken: token,
            resourceCollectionType: self.resourceCollectionType
        )
    }
}

extension DevOpsGuru.ListAnomaliesForInsightRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListAnomaliesForInsightRequest {
        return .init(
            accountId: self.accountId,
            filters: self.filters,
            insightId: self.insightId,
            maxResults: self.maxResults,
            nextToken: token,
            startTimeRange: self.startTimeRange
        )
    }
}

extension DevOpsGuru.ListAnomalousLogGroupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListAnomalousLogGroupsRequest {
        return .init(
            insightId: self.insightId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension DevOpsGuru.ListEventsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListEventsRequest {
        return .init(
            accountId: self.accountId,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension DevOpsGuru.ListInsightsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListInsightsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            statusFilter: self.statusFilter
        )
    }
}

extension DevOpsGuru.ListMonitoredResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListMonitoredResourcesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension DevOpsGuru.ListNotificationChannelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListNotificationChannelsRequest {
        return .init(
            nextToken: token
        )
    }
}

extension DevOpsGuru.ListOrganizationInsightsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListOrganizationInsightsRequest {
        return .init(
            accountIds: self.accountIds,
            maxResults: self.maxResults,
            nextToken: token,
            organizationalUnitIds: self.organizationalUnitIds,
            statusFilter: self.statusFilter
        )
    }
}

extension DevOpsGuru.ListRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.ListRecommendationsRequest {
        return .init(
            accountId: self.accountId,
            insightId: self.insightId,
            locale: self.locale,
            nextToken: token
        )
    }
}

extension DevOpsGuru.SearchInsightsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.SearchInsightsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            startTimeRange: self.startTimeRange,
            type: self.type
        )
    }
}

extension DevOpsGuru.SearchOrganizationInsightsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> DevOpsGuru.SearchOrganizationInsightsRequest {
        return .init(
            accountIds: self.accountIds,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            startTimeRange: self.startTimeRange,
            type: self.type
        )
    }
}
